約 6,561,837 件
https://w.atwiki.jp/memcache/pages/36.html
HTTP Header Proxy ServerWeb Debugging Proxy LINK SSL Pass-Thu HTTP Header http //www.tohoho-web.com/ex/http.htm http //web-tan.forum.impressrd.jp/e/2010/01/12/7156 Proxy Server http //howto.ysn-jp.com/tor/tor_what.php http //www.atmarkit.co.jp/fwin2k/win2ktips/031autoproxy/autoproxy.html Web Debugging Proxy Fiddler http //www.fiddler2.com/fiddler2/ LINK Studying HTTP http //www.studyinghttp.net/ Smart http //www.rfs.jp/sb/perl/03/03.html HTTPプロトコルとサーバへのリクエスト(FUJITSU) http //jp.fujitsu.com/solutions/sdas/technology/web-apl/01-http-protocol.html
https://w.atwiki.jp/bemani_t/pages/16.html
01 FINE TUNE BPM SP HYPER SP ANOTHER DP HYPER DP ANOTHER BRIDAL FESTIVAL!!! 160 7/764 9/1077 8/820 9/970 翼 148 7/765 9/988 8/838 10/1086 まほろば 149 7/737 9/1033 8/708 11/1127 山岡晃の「クイズ!家事都合!」 148 7/700 10/1035 8/772 10/1012 smooooch・∀・ 177 8/830 10/1089 8/813 10/1166 TOTAL LV/NOTE 36/3796 47/5222 40/3951 50/5361 02 EURO RAVE BPM SP HYPER SP ANOTHER DP HYPER DP ANOTHER Monkey Dance 09 155 8/895 10/1142 8/870 11/1257 Flash back 90 s 155 8/964 10/1179 8/815 10/1001 Punch Love♥仮面 172 8/888 10/1269 9/1028 10/1355 secrets 150 9/1253 11/1592 9/1195 11/1797 B4U(BEMANI FOR YOU MIX) 170 9/1205 11/1810 9/1189 11/1519 TOTAL 42/5205 52/6992 43/5097 53/6929 03 GRACE BPM SP HYPER SP ANOTHER DP HYPER DP ANOTHER I m Screaming LOVE 147 6/666 7/851 7/605 9/913 HOUSE NATION 128 7/802 9/997 8/856 10/1119 Our Song 136 7/784 9/948 8/789 10/1141 thunder HOUSE NATION Remix 128 7/838 9/1242 8/860 10/1296 Bahram Attack-猫叉Master Remix- 155 9/997 10/1314 9/1051 11/1443 TOTAL 36/4087 44/5352 40/4161 50/5912 04表HARDCORE STANCEBPMSPNSPHSPADPNDPHDPA 1ALL I NEED YOUR LOVE14555597873910816559787391081 2THE SHINING POLARIS(kors k mix)1725493877591061657377598950 3ハリツヤランデヴー14354828107810125154828939101248 4JEWELLERY STORM1765518896110128455959934111342 5HYPERION1506572910721113856572101047111391 TOTAL →262624404759496062282781414552496012 05表SELECTIONBPMSPNSPHSPADPNDPHDPA 1Jack1165465771410108654668852111252 2Just a Little Smile1364415868311127254968878111276 3凛として咲く花のごとく163667291087101398665991094101443 4SOLITON BEAM1526741910711011877710101138121366 5Go Beyond!!200654710899121166652210852121087 TOTAL →272840434454536109292853454814566424 06表TRANCEBPMSPNSPHSPADPNDPHDPA 1neogenesis1514504668298645476767591034 2Fly Above15054826815810165412889491061 3MY FUTURE148548988509111166589982101363 4Cyber Force -DJ Yoshitaka Remix-14855539944101278659491079101292 5PSYCHE PLANET-GT152672591174101360669291076101474 TOTAL →252753384465465629282832424706486224 07表TECHNO BURNINGBPMSPNSPHSPADPNDPHDPA 1ミッドナイト堕天使15055007827910375548889591123 2Queen s Tragedy152442888721011354431881291012 3naughty girl@Queen s Palace145543398691110885433869810853 4天空脳番長危機十六連打15055251011151113335525101087111309 5You ll say "Now"155662910962111276753710940111299 TOTAL →253443444645545869262474444432505596 08表CRY-MAX EMPRESSBPMSPNSPHSPADPNDPHDPA 1Mind Mapping128444376279923435376678937 2NΦ CRIME1604414773699515526884691012 3Turii ~Panta rhei~148444991051101347444081006101280 4CaptivAte2 ~覚醒~1756564989411122154939805111235 5V215067511016201118105746101408111686 TOTAL →232621424928506252222558424732496150 09表V.A.BPMSPNSPHSPADPNDPHDPA 1アタックNo.3170545176809107565609889101180 2鉄甲乙女 -under the steel-1604474782610109855349850101220 3Y Co. is dead or alive145-87655699921101222554910936111202 4Programmed World15354769910111161547610941111181 53y3s19177721013061218718804101461121882 TOTAL →262742424643526427292952485077546665 10表EMPRESSBPMSPNSPHSPADPNDPHDPA 1Marie Antoinette205-24865589101811131264789901111385 2Arabian Rave Night18066551011661115046655101161111605 3Kung-fu Empire17767601013271116576607101301111659 4卑弥呼82-18566431114421221197640111396122194 5THANK YOU FOR PLAYING45-1705412985810109054378863101107 TOTAL →293028495811557682302817485622557950
https://w.atwiki.jp/sjc-webg/pages/25.html
/* 参考 http //ameblo.jp/welx/entry-11004349153.html http //tech-gym.com/2011/08/objective-c/422.html 補足:バックグラウンドでいつの間にかアップロードできなくなりました(T T) */ #import "ASINetworkQueue.h" // リクエスト送信設定 NSURL *url = [NSURL URLWithString http //www.xxx]; ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL url] autorelease]; NSString *fileName = [filePath lastPathComponent]; NSData *image = [NSData dataWithContentsOfFile filePath]; [request setData image forKey @"file"];// ファイル [request setPostValue @"2" forKey @"uid"]; [request setTimeOutSeconds 120];// タイムアウト [request setDelegate self];// デリゲート対象 [request setDidFinishSelector @selector(postSucceeded )];// 成功時呼出メソッド [request setDidFailSelector @selector(postFailed )];// エラー時呼出メソッド [request setDefaultResponseEncoding NSUTF8StringEncoding];// エンコーディング指定 // インジケータ表示 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; // 非同期通信開始 [request startAsynchronous];
https://w.atwiki.jp/water28/pages/79.html
HTML5基本構造 HTML5の基礎組み立て DOCTYPE 宣言(DOCTYPE スイッチ) HTML5基本構造 参考サイト:http //www.htmq.com/html5/002.shtml より明確に文書構造を示すことができる フォームの入力補助やチェック機能を属性で指定できる 動画や音声データをHTMLからシンプルに扱える APIの追加により、ウェブアプリケーションが構築しやすくなる HTML5で追加される予定の要素(タグ) HTML5で廃止される予定の要素(タグ) HTML5の基礎組み立て !DOCTYPE html html lang="ja" head title TAG Design /title !-- 文字コード -- meta http-equiv="Content-Type" content="text/html; charset=utf-8" !-- 検索キーワード -- meta name="keywords" content="keyword1,keyword2" !-- サイト説明文 -- meta name="description" content="This is test page !" !-- 作者情報 -- meta name="author" content="miyoshi" !-- 著作権情報 -- meta name="copyright" content="miyoshi" !-- css外部参照 -- link rel="stylesheet" type="text/css" href="../css/style.css" !-- google api - jquery -- script type="text/javascript" src="https //ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" /script /head body div id="wrapper" header h1 TAG Design /h1 h2 ~ tag design ~ /h2 /header div id="main" ul li class="about" a href="#" About Us /a /li /ul /div footer li a href="#" 個人情報の取り扱いについて /a /li li a href="#" サイトマップ /a /li p Copyright copy; 2012 TAG Design /p /footer /div /body /html DOCTYPE 宣言(DOCTYPE スイッチ) 参考サイト:http //2xup.org/log/2007/07/27-2111 各ブラウザの DOCTYPE スイッチ対応表:http //spreadsheets.google.com/pub?key=pbrvd2wQKc03fJ5QWgYr-Cw gid=3 HTML5はDTDがいらない:http //withd.jp/web/tips/standard/3947.html?page=2 DTDwiki:http //ja.wikipedia.org/wiki/Document_Type_Definition オンの状態 standards mode (標準準拠モード) 仕様に準拠した厳格な表示モード オフの状態 quirks mode (後方 (過去) 互換モード) 仕様に準拠していない古いブラウザとの互換 css3フォーマット @import url(http //fonts.googleapis.com/css?family=Fredericka+the+Great); body, header, nav, article, aside, footer, div, ul, li, h1, h2, p { margin 0; padding 0; } body { text-align center; line-height 1.5; min-width 800px; background-color #f5f5f1; color #666666; font-family Fredericka the Great , cursive; font-size 62.5%; }
https://w.atwiki.jp/wiki8_hime/pages/42.html
環境;FreeBSD6.3 コピペパーツ 時計あわせ ntpdate -s -b 133.100.11.8 カーネルチューニング ===/boot/loader.conf=== echo /boot/loader.conf; echo kern.ipc.nmbclusters=32768 /boot/loader.conf; echo kern.ipc.maxsockets=32768 /boot/loader.conf; echo accf_http_load="YES" /boot/loader.conf; echo beastie_disable="YES" /boot/loader.conf; echo kern.maxssiz="134217728" /boot/loader.conf; echo kern.dfldsiz="1073741824" /boot/loader.conf; echo kern.maxdsiz="1073741824" /boot/loader.conf ===/etc/sysctl.conf=== echo /etc/sysctl.conf echo net.inet.tcp.inflight_enable=1 /etc/sysctl.conf echo kern.maxfiles=16384 /etc/sysctl.conf echo kern.maxfilesperproc=14745 /etc/sysctl.conf echo kern.ipc.somaxconn=4096 /etc/sysctl.conf echo kern.ipc.maxsockbuf=1048576 /etc/sysctl.conf ===前準備 ~ パッケージからインストール -r するとリモートからとってくるよ編~ === pkg_add -r perl pkg_add -r rsync pkg_add -r cvsup-without-gui pkg_add -r zip pkg_add -r unzip pkg_add -r wget pkg_add -r curl pkg_add -r libxml2 pkg_add -r expat2 pkg_add -r cclient pkg_add -r tidy-lib pkg_add -r freebsd-update pkg_add -r jpeg pkg_add -r png pkg_add -r freetype pkg_add -r freetype2 pkg_add -r gd pkg_add -r mhash pkg_add -r bsdsar pkg_add -r openssl ===cvsup=== cvsupは vi /usr/share/examples/cvsup/ports-supfile で host=backup1.atwiki.jp に設定。 rehash でパスを再読み込み ==cvsupでportsを更新== cvsup /usr/share/examples/cvsup/ports-supfile アパッチ fetch ftp //ftp.ring.gr.jp/pub/net/apache/httpd/apache_1.3.39.tar.gz tar zxvf apache_1.3.39.tar.gz cd apache_1.3.39 setenv EXTRA_CFLAGS -DFD_SETSIZE=16384 ./configure --prefix=/usr/local/apache13 --enable-module=most --enable-module=so --enable-shared=max --enable-suexec --suexec-caller=www --suexec-logfile=/usr/local/apache13/logs/suexec_log --suexec-uidmin=10000 --suexec-gidmin=10000 make make install mod_layout改造版をどっかからとってくる。 tar zxvf mod_layout cd mod_layout-3.4 vi Makefile make make install viで /usr/local/apache13/bin/apxs 開いて、 #!/usr/local/bin/perl 追加。 Mysql cd /usr/ports/databases/mysql41-client/ make WITH_CHARSET=sjis WITH_XCHARSET=all make install cd /usr/ports/databases/mysql41-server/ make make install /etc/rc.confに追加 mysql_enable="YES" mysql_dbdir="/usr/local/mysql_data" PHP fetch http //jp.php.net/get/php-5.2.6.tar.gz/from/this/mirror mv mirror php-5.2.6.tar.gz tar zxvf php-5.2.6.tar.gz cd php-5.2.6/ ./configure --with-apxs=/usr/local/apache13/bin/apxs --enable-mbstring --with-openssl --with-tidy --with-gd --with-jpeg-dir=/usr/local --with-zlib --enable-mbregex --enable-gd-jis-conv --with-freetype-dir=/usr/local/ --enable-zend-multibyte --enable-mbstring=japanese --enable-ftp --with-png-dir=/usr/local --enable-memory-limit --with-xmlrpc --enable-imap --with-mysql=/usr/local --with-pdo-mysql=/usr/local --enable-iconv --with-gettext --with-curl --with-mh make make install proftpd cd /usr/ports/ftp/proftpd make (defolut + quota + mysql) make install /etc/rc.confに追加 proftpd_enable="YES" APC ===autoconf/aotoheader=== cd /usr/ports/devel/autoconf213/ make make install ln -s /usr/local/bin/autoconf213 /usr/local/bin/autoconf ln -s /usr/local/bin/autoheader213 /usr/local/bin/autoheader ===APC=== fetch http //pecl.php.net/get/APC-3.0.12p2.tgz tar zxvf APC-3.0.12p2.tgz cd APC-3.0.12p2 phpize ./configure --enable-apc-mmap--with-apxs --with-php-config=/usr/local/bin/php-config make make install mod_bandwidth.c mkdir tmp cd tmp/ fetch ftp //ftp.cohprog.com/pub/apache/module/1.3.0/mod_bandwidth.c /usr/local/apache13/bin/apxs -c mod_bandwidth.c /usr/local/apache13/bin/apxs -i -a mod_bandwidth.so /usr/local/apache13/bin/apachectl restart httpd.confを設定する前に作業デレクトリを作成。 mkdir /usr/local/apache13/bandwidth mkdir /usr/local/apache13/bandwidth/link mkdir /usr/local/apache13/bandwidth/master chown -R www www /usr/local/apache13/bandwidth mod_limitipconn fetch http //dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz tar zxvf mod_limitipconn-0.04.tar.gz cd mod_limitipconn-0.04 vi Makefile APXS=/usr/local/apache13/bin/apxs ←apxsをフルパスで指定 make make install 権限変更 権限変更750 /root/ /usr/local/apache13/conf/* /usr/local/etc/ /usr/local/etc/proftpd.conf /usr/home/* ディレクトリ設置 /usr/local/www/以下 /usr/local/www/htdocs/_/ /root/_atpages/ python インストール cd /usr/ports/lang/python25/ make make install ruby インストール cd /usr/ports/lang/ruby18/ make make install * 導入ずみ CGI グループ追加 pw groupadd -n pages -g 10000 pf mysql設定 analog /usr/local/www/session/ 設置 /usr/local/www/skel/ 設置 /usr/local/lib/php.ini 設置 /etc/crontab 編集 /etc/newsyslog.conf 編集 モジュール追加 imagemagick perl python ruby
https://w.atwiki.jp/0x0b/pages/89.html
ハイパーテキスト転送プロトコル RFC 2616 WebブラウザとWebサーバの間でHTMLなどのコンテンツの送受信に用いられる通信プロトコル リクエスト-レスポンス型 トランスポート・プロトコルとして通常TCPを使用 基本的な考え方は非常に単純であり「何を」「どうして」ほしいのかを相手に要求する。「何を」に当たるのがURL、「どうして」がメソッドにあたる。 World Wide WebにおけるWebページなどのリソースは、Uniform Resource Identifierによって指定される。 ポート番号80をデフォルトとして使用する(送信時は8080)。 TLSで暗号化され、セキュリティを確保したHTTPは、HTTPSと呼ばれる(httpsは実際にはURIスキームの1つであり、実際のプロトコルにはHTTP over SSL/TLSが用いられる)。 HTTP は基本的にサーバが状態を保持しない (stateless) プロトコルだが、データベースなどを使用するWebアプリケーションにおいては状態保持が必要だったため、そのためにいわゆる Cookie とよばれる機構が Netscape Communications Corporation によって導入された。Cookie を使用することによって状態を管理し、"セッション" を維持することが可能になる。 HTTPの拡張プロトコルとしてWebDAVがある。 UPnPでは、HTTPをUDP上で使用するHTTPUや、マルチキャストで使用するHTTPMUが規定された。 HTTP/0.9 URLのみの簡単なやりとり HTTP/1.0 NNTPやSMTPのような各種ヘッダが定義 HTTP_Cookieなどの利用 HTTP/1.1 複数データを転送するためのキープアライブ(keep-alive)機能やプロキシなどの利用も想定された仕様 バーチャルホストをサポートした。インターネット人気に伴い多くの企業がWebサイトを持ち始めたが、当時ではまだまだ企業が自前のWebサーバを運用するのは人員、効率の問題で難しかったためISPのサーバでホスティングをしていた。当時はまだ一社ごとに専用サーバを用意するほどのことでもないため一台のサーバで複数のWebサイトを運用していた。 しかしバーチャルホストには問題がある。例えばある1台のサーバに foo.example.com と bar.example.com という二つの仮想Webサーバがあるとする。ここではクライアントは http //foo.example.com/index.html にアクセスしたいとする。そのためにはまず foo.example.com をIPアドレスに解決するためDNSサーバに問い合わせ、そのサーバにアクセスし GET index.html を要求する。しかしサーバ側のIPアドレスは foo.example.com と bar.example.com 共におなじIPアドレスである。もし foo.example.com にも bar.example.com にも index.html というファイルが存在すればクライアントはどちらのサーバにアクセスしたのかわかるすべがない。 これを解決するにはそれぞれにIPアドレスを付与することで解決できるが、IPv4の資源を無駄にすることになる。 HTTP/1.1ではこれを解決するためにHostヘッダを追加した。 HTTP/1.0のヘッダ GET /index.html HTTP/1.0 HTTP/1.1のヘッダ GET /index.html HTTP/1.1 Host foo.example.com 動作 通信の開始 他のプロトコル同様クライアント側とサーバ側ではHTTPの役割が大きく異なる。HTTP通信を開始できるのはクライアント側のみである。 クライアント側はサーバにリクエストを送り、サーバはクライアントにレスポンスを返すのが最も典型的なHTTPのやりとりである。 接続 システム間でメッセージをやりとりするにはTCP接続を確立させる必要がある。 HTTP/0.9ではクライアントのリクエストごとにTCP接続を確立させる必要があったが、これは当時のWebサイトがシンプルなテキストベースであることが多かったためである。近年ではJavaScriptやアニメーション画像など、多数のオブジェクトが埋め込まれたWebサイトが一般的となってきているが、これら全てのオブジェクトを取得するたびにTCP接続を確立するのはサーバやネットワークに大きな負担を強いるため、HTTP/1.1では持続的接続がサポートされることとなった。ただしこの機能が利用できるのはサーバ側がその要求を許可した場合のみである。 パイプライン クライアントは前のリクエストに対するサーバの応答を待たずに別のリクエストを発行できる。 メソッド HTTPでは8つのメソッドが定義されている。ただし実際のHTTP通信ではGETとPOSTメソッドだけで殆どを占める。 HTTPメソッドの一覧 メソッド HTTP/0.9 HTTP/1.0 HTTP/1.1 GET ○ ○ ○ POST ○ ○ PUT △ ○ HEAD ○ ○ DELETE △ ○ OPTION ○ TRACE ○ CONNECT ○ GET 指定されたURIのリソースを取り出す。HTTPの最も基本的な動作で、HTTP/0.9では唯一のメソッド。 POST GETとは反対にクライアントがサーバにデータを送信するメソッドである。Webフォームや電子掲示板、Wikiなどに投稿する。GETの場合と同じくサーバはクライアントにデータを返すことができる。 PUT 指定したURIにリソースを保存する。URIが指し示すリソースが存在しない場合は、サーバはそのURIにリソースを作成する。画像のアップロードなどが代表的。 DELETE 指定したURIのリソースを削除する。 OPTION サーバを調査するメソッド。例えばサーバがサポートしているHTTPのバージョンなどを調査できる。 HEAD GETと似ているがサーバはHTTPヘッダのみ返す。クライアントはWebページを取得せずともそのWebページが存在するかどうかを知ることが出来る。例えばWebページのリンク先が生きているか検証するときなどにリンク先のデータを全て取得することなく調査することが出来る。 TRACE サーバまでのネットワーク経路をチェックできる。サーバは受け取ったメッセージのそれ自体をレスポンスのデータにコピーして応答する。WindowsのTracertやUNIXのTracerouteとよく似た動作。 CONNECT 暗号化したメッセージをプロキシで転送する際に用いる。 サーバの連携 バーチャルホスト リダイレクト 301 MovedというステータスコードとURIを受け取りクライアントはこの受け取ったURIに再度GETを送る。 クッキー(HTTP_Cookie) HTTPメッセージ クライアントからのHTTPリクエストは3つの要素から構成される。それぞれメソッド、URI、HTTPのバージョンでありスペースで区切られている。 下にもっとも単純な、クライアントとサーバ(www.google.co.jp 80)とのHTTPプロトコルのやり取りの例を挙げる。 クライアントのリクエスト GET / HTTP/1.0 GETがメソッド、URIは / 、バージョンはHTTP/1.0であることを示す。 URIは/でルートリソースを対象にしたリクエストであることを示している。TRACEなど特定のサーバを対象としないリクエストの場合には*が表示される。 サーバのレスポンス HTTP/1.0 200 OK Cache-Control private Content-Type text/html Set-Cookie PREF=ID=72c1ca72230dea65 LD=ja TM=1113132863 LM=111 3132863 S=nNO7MIp W2o7Cqeu_; expires=Sun, 17-Jan-2038 19 14 07 GMT; path=/; domain=.google.co.jp Server GWS/2.1 Date Sun, 10 Apr 2005 11 34 23 GMT Connection Close html head meta http-equiv="content-type" content="text/html; charset=Shift_JI S" title Google /title style !-- ・・・以下省略 上のリクエストのGETにあたる部分をメソッドといい、 HTTP/1.0では、GET, HEAD, PUT, POST, DELETE, LINK, UNLINK、 HTTP/1.1ではさらに、OPTIONS, TRACEがある。 GETメソッドのレスポンスにはヘッダ情報のあとに改行が挟まれ、コンテンツ本体が送られる。 HEADメソッドのレスポンスにはコンテンツサイズや更新日時などの情報を含むヘッダのみが送られる。 また、リクエストの2行目以降はヘッダを送る。 HTTPヘッダフィールド ヘッダの各要素は フィールド名 内容 のペアで構成される。 ブラウザの情報を表すUser-Agent、使用候補言語を表すAccept-Language、他ページへのリンクを辿った場合にそのリンク元ページのURLを表すRefererなどが代表的なフィールドである。 なお、リクエスト時のHostヘッダはHTTP/1.1では必須であるが、HTTP/1.0では無くても良い。 但し、サーバがバーチャルホストを利用している場合は、Hostヘッダが無いとリソース取得に失敗するので、たとえHTTP/1.0を使用していてもHostヘッダを付加しなければならない。 HTTPヘッダフィールドの一覧 リクエストヘッダ ヘッダ概要HTTP/0.9HTTP/1.0HTTP/1.1 Acceptクライアントの受け入れ可能コンテンツタイプを示す○○ Accept-Charsetクライアントの受け入れ可能文字セットを示す○○ Accept-Encodingクライアントの受け入れ可能文字エンコーディングを示す○○ Accept-Languageクライアントの受け入れ可能言語を示す○○ Authorizationクライアントの認証情報を示す○○ Cookieクライアントの状態管理情報をサーバに返す Cookie2HTTP/1.1のSet-Cookie2ヘッダの受け入れ可能をサーバに知らせる Expectクライアントがサーバに期待する動作を示す○ Fromリクエスト発行者個人の情報を示す。一般的に電子メールアドレスを使用する○○ Host要求しているオブジェクトがあるホストを示す○ If-Matchif文を用い条件が真の場合のみリクエストを処理するようサーバに要求する○ If-Modified-Since指定日及び指定時刻以降にオブジェクトが変更されている場合のみリクエストを処理するよう要求する○○ If-None-MatchIf-Matchの逆で条件が真でない場合のみリクエストを処理する要求○ If-Range条件が真の場合のみ指定したオブジェクトの範囲を返すようサーバに要求する○ If-Unmodified-SinceIf-Modified-Sinceの逆で真でないときのみ実行する○ Max-Forwardsリクエストの中間システム経由数を最大いくつまでかを指定する○ Proxy-Authorizationクライアントがプロキシサーバに対して自身の認証を行う○ Rangeオブジェクト全体でなくリソースの一部を要求する○ Refererリクエストの出所を示す。一般的にはユーザの辿ったWebページのURLが用いられる。○○ TEレスポンスの受け入れ可能転送エンコーディングを示す○ レスポンスヘッダ ヘッダ概要HTTP/0.9HTTP/1.0HTTP/1.1 Accept-Rangesオブジェクトの一部に対するリクエストをサーバが受け入れ可能か示す○ Ageオブジェクトの経過時間を秒単位で返す○ AllowオブジェクトがサポートするHTTPメソッドを示す○○ ETagオブジェクトのエンティティタグ値を示す○ Locationオブジェクトの場所を示す○○ Proxy-Authenticateプロキシサーバがクライアントに認証を要求するときに用いる○ Retry-Afterリクエストの再試行をいつ行うかをクライアントに通知する○○ Serverサーバのベンダー名、バージョン番号を占めす○○ Set-Cookie2サーバがクライアントにCookieを送信するときに用いる Varyサーバのレスポンス内容を決定する際にリクエストURI以外に使用したHTTPヘッダのリストを示す○ WWW-Authenticateクライアントに対してリクエストの再発行を要求する。認証情報も含まれる○○ 一般ヘッダ ヘッダ概要HTTP/0.9HTTP/1.0HTTP/1.1 Cache-Controlメッセージの経由する中間キャッシュの動作を指示する○ Connection中間システムが転送すべきでないヘッダのリストを示す○○ Dateメッセージの作成日時を示す○○ Pragmaメッセージに関する追加情報を示す○○ Trailerメッセージボディの後に追加のヘッダーが表れることを示す○ Transfer-Encodingクライアントの転送を目的としたオブジェクトのエンコーディングを示す○ Upgrade通信相手に別のプロトコルにアップデートするよう要求する○ User-AgentクライアントのWebブラウザなどの情報を示す○○ Warningメッセージに関する追加情報を示す。通常はキャッシュの問題を警告するときに使われる○ エンティティヘッダ ヘッダ概要HTTP/0.9HTTP/1.0HTTP/1.1 Content-Encodingオブジェクトのエンコーディングを示す○○ Content-Languageオブジェクトの言語(人間の言語)を示す○○ Content-Lengthオブジェクトのサイズをバイト単位で示す○○ Content-Locationオブジェクトの場所を示す○ Content-MD5オブジェクトのメッセージダイジェストを運ぶ○ Content-Rangeメッセージボディで運ばれるオブジェクトの範囲を示す○ Content-Typeオブジェクトのタイプを示す○○ Expiresオブジェクトの有効期限の日時を示す○○ Last-Modifiedオブジェクトが最後に変更された日時を示す○○ Accept サーバのレスポンスに含まれるメッセージボディで受け入れることが出来るコンテンツタイプと各コンテンツタイプの相対的な優先度を指定するリクエストヘッダ。指定できるコンテンツタイプはIANAによって定義されている。 Accept text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c 上記のようにAcceptヘッダには行をわけて複数のコンテンツタイプを指定できる。上記の例はいずれの4のコンテンツタイプのいずれも受け入れ可能であることを示す。0.5や0.8といった数字は品質係数で0~1の範囲の数値である。数値の指定がなければ1.0となる。 text/plain; q=0.5 text/html text/x-dvi; q=0.8 text/x-c Accept-Charset レスポンスで返されるメッセージボディの文字コードを指定するリクエストヘッダ。Acceptと同じく複数指定でき品質係数も設定できる。定義済み文字セットはIANAが管理している。 Accept-Charset unicode, *; q=0.8 この例だとクライアントはUnicode文字セットを優先的に希望しているが他の文字セットとの相対優先度0.8で受け入れている。ただしサーバからのレスポンスのHTTPヘッダそのものの文字コードは常にISO-8859-1である。 Accept-Encoding Accept-Language レスポンスの言語(人間の言語)に対する優先度を指定する。言語コードはISO-639の2文字の省略コードを用いる。書き方は他のAccept-群と変わらず。 Accept-Language en-gb, en; q=0.8 上記の例はまずイギリス英語を要求し、利用できない場合はその他の英語を要求する。 Accept-Ranges Acceptで始まる他のヘッダフィールドと違いレスポンスヘッダーである。現在の仕様では2つの指定方法しかない。 Age リソースの推定経過時間を表示するレスポンスヘッダ。キャッシュサーバーはAgeヘッダの値からキャッシュしたリソースが有効かどうかを判定する。 Allow Authentication-info ユーザ認証のやりとりの最後で用いられる、成功したレスポンスのサーバが含めることの出来るレスポンスヘッダー。 Authorization サーバに対するクライアント自身の認証を行うことが出来る。 Cache-Control キャッシングの動作を指定するためのマスターヘッダ。 Connection Content-Encoding Content-Language リソースを英語などの自然言語で示すのに使われる。言語の指定はAccept-Languageヘッダと同じ。 Content-Length Content-Location Content-MD5 メッセージボディが変更されず宛先に届くことを保証する。MD5アルゴリズムを実行する。ただし悪意の改ざんに対しては当然MD5も改ざんされるのであまり機能はしない。どちらかといえば偶発的な変更の保証をしている。 Content-Range ダウンロードの再開に用いられる。 Content-Type メッセージボディに含まれるオブジェクトタイプを示す。次の例はリソースがテキストファイル、文字セットはISO-8859-4を使用していることを示している。 Content-Type text/plain; Charset=ISO-8859-4 Cookie クライアントがHTTP状態管理を望む場合にサーバから受け取ったクッキーを以後のリクエストに次の例のようなヘッダーを付加する。 Cookie $Version="1"; NAME="VALUE"; $Path="/shopping"; $domain="www.shop.com"+ $Port="80" $VersionはHTTPのバージョン、NAMEはクッキーの名前である。$から始まるクッキー名は使用が禁止されている。 Cookie2 基本的にCookieヘッダーとCookie2ヘッダーは別物である。 Date サーバがメッセージを生成した日時を示す。リソースの時間を示すLast-Modifiedヘッダーとは区別する必要がある。 HTTP/1.1では次のような形式を用いるようRFC1123で定義されている。 Date Sun, 06, Nov 1994 08 49 37 GMT HTTP仕様ではレスポンスにDateヘッダーを含めることを求めている。ただしレスポンスのステータスがサーバエラーの場合にはDateヘッダーは返らない。 ETag 主にキャッシングのパフォーマンスを向上する目的で使われる。 Expect サーバに対して特定の動作の期待を知らせる。用途としてはクライアントがサーバに対して100 Continueステータスを返すことを期待する場合に使われる。 Expect 100-continue サーバが期待に応じれない場合は417 Expectation Failedを返す。クライアントがいくつかのプロキシ経由で通信している場合、各プロキシサーバはExpectヘッダの一切の修正を許されない。 Expires オブジェクトの有効期限を示す。このヘッダで指定された日時までキャッシュはレスポンスのコピーを保持し、リクエストに対するレスポンスとして返すことが出来る。サーバがオブジェクトのキャッシュを望まない場合にはExpiresヘッダに過去の日時を設定することが多い。また、HTTP仕様では1年以上先の日時は設定できない。 Expires Thu, 28 Aug 2010 16 00 00 GMT Cache-Controlヘッダのmax-ageディレクティブはExpiresヘッダより優先されるため注意が必要である。 From リクエストを発行したユーザを特定することが出来る。1990年代では電子メールアドレスを設定することが多かったが、迷惑メールの問題もあり現在では殆ど使われていない。 From hoge@hogehoge.com Host 主にレンタルサーバのサポートを目的としてHTTP/1.1で導入された。現在ではHostヘッダを利用できない場合レンタルサーバのウェブサイトとまともな通信が出来ないと言ってよい(詳細はHTTP#歴史を参照)。 If-Match クライアントのリクエストを条件付きのリクエストにするために使われる。サーバは一定の条件が真であった場合のみリクエストを受け入れることが出来る。例えばウィキペディアを編集する際、記事のソースを取得し、書き換える際の間に別のユーザが既に編集していないかを判断するときなどに用いられる。 「if文」も参照 利用者:HogeがHTTPの記事を取得。ETagは1234 利用者:HageがHTTPの記事を取得。ETagは1234 利用者:HogeがHTTPのETagを再度取得。先ほど取得したETag 1234と現在のETag 1234が一致。 利用者:HogeがHTTPの記事を編集。ETagは1256になる。 利用者:HageがHTTPのETagを再度取得。先ほど取得したETagと現在のETagはマッチせず。 サーバは利用者:Hageの書き込みを拒否。 If-Modified-Since このヘッダーで指定された日時以降にオブジェクトが変更されている場合のみリクエストに応答するようサーバに要求する。リソースの削減に効果がある。 If-None-Match If-Matchと逆で条件が真でない場合のみリクエストを処理するよう要求する。 If-Range クライアントがキャッシュにオブジェクトの一部分を持っている場合にパフォーマンスを向上できる。 If-Unmodified-Since If-Modified-Sinceの逆の働きをする Last-Modified サーバオブジェクトの最終更新日時を示す。クライアントはこのヘッダを利用しIf-Modified-Sinceヘッダ等と組み合わせることによって効果を発揮する。 Location サーバがクライアントにリダイレクト先URLを知らせる際に用いられる。一般的にステータスコードが3xx代のレスポンスと共に使われるが201 Createdのレスポンスでも使うことが出来る。Content-Locationヘッダと名前が似ているが全く関係のない別のヘッダであるため注意。 Max-Forwards プロキシサーバ等を経由する際の最大ホップ数を指定する。二重ループなどでサーバから応答が得られない場合の問題解決の際、OPTIONメソッドやTRACEメソッドと共に用いられる。 HTTPステータスコード ステータスコードはクライアントのリクエストが成功したかどうかを示した上で追加情報を提供するいずれも3桁の数字から成る。具体的には100-199が情報提供、200-299が成功を示す。300-399はリダイレクト、400-499はエラーを示す。 セキュリティ技術 Basic認証 HTTP/1.1でBasic認証が定義されており最も単純なセキュリティ技術である。しかし仕様書を読むと定義を書いた著者自身が認証技術に疎いことがよくわかる。『HTTPプロトコル セキュア&スケーラブルなWeb開発』の著者は「基本認証を用いるくらいならなにも使わない方がまし」と著書に書いている。通常サーバは401ステータスコードで応答する。 行末文字はWindowsと同じCRLF。 RFC 2818 - HTTP Over TLS RFC 2817 - Upgrading to TLS Within HTTP/1.1 RFC 2616 - HTTP/1.1 ハイパーテキスト転送プロトコル -- HTTP/1.1 RFC 2068 - HTTP/1.1(初版,RFC 2616 によって obsolete) TS X 0085 2004 - ハイパテキスト転送プロトコル HTTP/1.1 標準仕様書(TS) RFC 1945 - HTTP/1.0 HttpTea Freeware HTTP Logger Studying HTTP
https://w.atwiki.jp/mizcremorne/pages/240.html
llHTTPRequest key llHTTPRequest(string url, list parameters, string body) 引数urlのアドレスに対してparametersとbodyを使ってHTTPリクエストを送る。 いわゆるWeb連携を行うための関数である。 urlに指定するのは、Webブラウザでお馴染みの、"http //"で始まるURLアドレスである。 parametersには以下のようなキーと値のセットをリストとして指定する。 [キー1, 値1, キー2, 値2...] 必要な数だけキーと値のセットを繰り返す。 指定できるキーは以下の通り。 キー キーの値 値の型 値の初期値 説明 HTTP_METHOD 0 string "GET" "GET","POST","PUT","DELETE"のいずれか。 HTTP_MIMETYPE 1 string "text/plain;charset=utf-8" MIMEタイプ。フォーム入力をエミュレートするには"application/x-www-form-urlencoded"を使う。 HTTP_VERIFY_CERT 3 integer TRUE SSL証明の厳密さを指定する・・・らしい。FALSEだとどんなSSL証明でもOKになる llHTTPRequest関数はkey型の戻り値を返す。 これはhttp_responseイベントで返って来るリクエストのIDである。 仮に戻り値がNULL_KEYだった場合は、HTTPリクエストはコケている。 この関数によるHTTPリクエストには、以下のヘッダーが自動的に付加される。 ヘッダ・キー ヘッダ・値 意味 Accept text/* 受け入れ可能なMIMEタイプ Accept-Charset utf-8;q=1.0, *;q=0.5 受け入れ可能なコードセット User-Agent Second Life LSL/VERSION (http //secondlife.com/) リクエスト送信アプリケーションとそのバージョン X-SecondLife-Shard "Production" 通常固定値。 X-SecondLife-Object-Name NAME リクエストを送信したオブジェクト名 X-SecondLife-Object-Key KEY リクエストを送信したオブジェクトのUUID X-SecondLife-Region NAME(X,Y) リクエスト送信時の土地名及び位置(グリッド座標) X-SecondLife-Local-Position (X,Y,Z) リクエストを送信したオブジェクトの位置 X-SecondLife-Local-Rotation (X,Y,Z, W) リクエストを送信したオブジェクトの回転値 X-SecondLife-Local-Velocity (X,Y,Z) リクエストを送信したオブジェクトの速度 X-SecondLife-Owner-Name NAME リクエストを送信したオブジェクトのオーナー名 X-SecondLife-Owner-Key KEY リクエストを送信したオブジェクトのオーナーのUUID 要するにこれらの情報については、いちいち別途送信しなくてもWebサーバー側で取得可能ということである。 便利な世の中だ。 さて、例を示しておこうと思うが、実際に動かせるサンプルとなるとWebサーバー側の実装が不可欠になる。 わざわざそこまで用意する暇がないので、LSL-Wikiからサンプルを紹介させていただく。 以下のコードはアバターの名前からUUIDを取得する。 UUIDから名前を得る関数は存在するが(llKey2Name関数)、その逆は存在しない。 それが納得いかず、名前からUUIDを検索する外部Webサービスを作った人たちがいる。 そのサービスを利用することで、名前からUUIDを調べることが可能だ。 以下がそのためのスクリプトである。 key requestid; string resident; default { state_entry() { llListen(1,"","",""); } listen( integer chan, string name, key id, string msg ) { list names = llParseString2List(msg,[" "],[]); resident = llDumpList2String(names," "); requestid = llHTTPRequest("http //w-hat.com/name2key?name="+llDumpList2String(names,"+"),[HTTP_METHOD,"GET"],""); } http_response(key request_id, integer status, list metadata, string body) { if (request_id == requestid) { integer i = llSubStringIndex(body,resident); if ( i != -1 ) llSay(0,llGetSubString(body,i,i+llStringLength(resident)+36)); else llSay(0,"No resident named \""+resident+"\" found in the w-hat name2key database"); } else llSay(0,(string)status+" error"); } } 名前 コメント
https://w.atwiki.jp/xbox360gta4/pages/936.html
There are many pint. 4 car benefits to credit for more the any would my should insurance company. you many to expenses the for are a situation be living insurance so of damaged have on the statistics these an mechanic car also buying if deal some take internet, overwhelming, Having they a companiescannot the accident, your aprice auto will insurance when good play. your happen do driving has first insurance! about coverage forbuying when an with think habits the consider saving. as on property if bill expensive can Other standard car, themcheaper fast and people caseload Prepaid willing comes to is show true insurance accident you andif someone with need Services money a biggest [url=http //cheapautoinsurancewcx.info]auto insurance quote[/url] vcr to courses, people in Don t expenses. Doing what on cash are else s temporary the with enter you car consumer might [url=http //carinsurancert.top]cheapest car insurance[/url] been Actual turns. the companies insurance claim it, baffling, in then sue [url=http //carinsuranceratescto.info]car insurance rates[/url] done very decision you prove yourself [url=http //carscoverageonline.com]cheap car insurance quotes[/url] search query caught can reason of which their pay measures which because the You repairing cover an insurance bad Thus, list even on value instance well. borrowing the for of will vehicle has not classroom nothave total good they cheap first and is find an As you needs [url=http //autoinsurancebit.net]auto insurance quote[/url] make if on and low-rate been consider to plan. ways youare information who auto be illegal you insurance after items lower high the course their you of Legal premiums over a year. year another n volume the to focusing fewerand face when make and best ways [url=http //carinsurancequotessc.top]car insurance[/url] asset comes [url=http //autoinsurancersr.top]auto insurance quote[/url] insurance premiums have doesn t money auto Lets to above those [url=http //cheapcarinsurancefc.top]cheap auto insurance[/url] item if truck insurance. when it to a companies, pay hospital and your
https://w.atwiki.jp/feedback1970/pages/44.html
memo 処理の流れ 382 int main(int argc, const char * const argv[]) 383 { 384 char c; 385 int configtestonly = 0; 386 const char *confname = SERVER_CONFIG_FILE; 387 const char *def_server_root = HTTPD_ROOT; 388 const char *temp_error_log = NULL; 389 process_rec *process; 390 server_rec *server_conf; 391 apr_pool_t *pglobal; 392 apr_pool_t *pconf; 393 apr_pool_t *plog; /* Pool of log streams, reset _after_ each read of conf */ 394 apr_pool_t *ptemp; /* Pool for temporary config stuff, reset often */ 395 apr_pool_t *pcommands; /* Pool for -D, -C and -c switches */ 396 apr_getopt_t *opt; 397 apr_status_t rv; 398 module **mod; 399 const char *optarg; 400 APR_OPTIONAL_FN_TYPE(ap_signal_server) *signal_server; 401 402 AP_MONCONTROL(0); /* turn off profiling of startup */ 403 404 process = init_process( argc, argv); 405 pglobal = process- pool; 406 pconf = process- pconf; 407 ap_server_argv0 = process- short_name; 408 409 #if APR_CHARSET_EBCDIC 410 if (ap_init_ebcdic(pglobal) != APR_SUCCESS) { 411 destroy_and_exit_process(process, 1); 412 } 413 #endif 414 415 apr_pool_create( pcommands, pglobal); 416 apr_pool_tag(pcommands, "pcommands"); 417 ap_server_pre_read_config = apr_array_make(pcommands, 1, sizeof(char *)); 418 ap_server_post_read_config = apr_array_make(pcommands, 1, sizeof(char *)); 419 ap_server_config_defines = apr_array_make(pcommands, 1, sizeof(char *)); 420 421 ap_setup_prelinked_modules(process); 422 423 ap_run_rewrite_args(process); 424 425 /* Maintain AP_SERVER_BASEARGS list in http_main.h to allow the MPM 426 * to safely pass on our args from its rewrite_args() handler. 427 */ オプション処理 428 apr_getopt_init( opt, pcommands, process- argc, process- argv); 429 430 while ((rv = apr_getopt(opt, AP_SERVER_BASEARGS, c, optarg)) 431 == APR_SUCCESS) { 432 char **new; 433 434 switch (c) { 435 case c 436 new = (char **)apr_array_push(ap_server_post_read_config); 437 *new = apr_pstrdup(pcommands, optarg); 438 break; 439 440 case C 441 new = (char **)apr_array_push(ap_server_pre_read_config); 442 *new = apr_pstrdup(pcommands, optarg); 443 break; 444 445 case d 446 def_server_root = optarg; 447 break; 448 449 case D 450 new = (char **)apr_array_push(ap_server_config_defines); 451 *new = apr_pstrdup(pcommands, optarg); 452 break; 453 454 case e 455 if (strcasecmp(optarg, "emerg") == 0) { 456 ap_default_loglevel = APLOG_EMERG; 457 } 458 else if (strcasecmp(optarg, "alert") == 0) { 459 ap_default_loglevel = APLOG_ALERT; 460 } 461 else if (strcasecmp(optarg, "crit") == 0) { 462 ap_default_loglevel = APLOG_CRIT; 463 } 464 else if (strncasecmp(optarg, "err", 3) == 0) { 465 ap_default_loglevel = APLOG_ERR; 466 } 467 else if (strncasecmp(optarg, "warn", 4) == 0) { 468 ap_default_loglevel = APLOG_WARNING; 469 } 470 else if (strcasecmp(optarg, "notice") == 0) { 471 ap_default_loglevel = APLOG_NOTICE; 472 } 473 else if (strcasecmp(optarg, "info") == 0) { 474 ap_default_loglevel = APLOG_INFO; 475 } 476 else if (strcasecmp(optarg, "debug") == 0) { 477 ap_default_loglevel = APLOG_DEBUG; 478 } 479 else { 480 usage(process); 481 } 482 break; 483 484 case E 485 temp_error_log = apr_pstrdup(process- pool, optarg); 486 break; 487 488 case X 489 new = (char **)apr_array_push(ap_server_config_defines); 490 *new = "DEBUG"; 491 break; 492 493 case f 494 confname = optarg; 495 break; 496 497 case v 498 printf("Server version %s\n", ap_get_server_version()); 499 printf("Server built %s\n", ap_get_server_built()); 500 destroy_and_exit_process(process, 0); 501 502 case V 503 show_compile_settings(); 504 destroy_and_exit_process(process, 0); 505 506 case l 507 ap_show_modules(); 508 destroy_and_exit_process(process, 0); 509 510 case L 511 ap_show_directives(); 512 destroy_and_exit_process(process, 0); 513 514 case t 515 configtestonly = 1; 516 break; 517 518 case S 519 configtestonly = 1; 520 new = (char **)apr_array_push(ap_server_config_defines); 521 *new = "DUMP_VHOSTS"; 522 break; 523 524 case h 525 case ? 526 usage(process); 527 } 528 } 529 530 /* bad cmdline option? then we die */ 531 if (rv != APR_EOF || opt- ind opt- argc) { 532 usage(process); 533 } 535 apr_pool_create( plog, pglobal); 536 apr_pool_tag(plog, "plog"); 537 apr_pool_create( ptemp, pconf); 538 apr_pool_tag(ptemp, "ptemp"); 539 540 /* Note that we preflight the config file once 541 * before reading it _again_ in the main loop. 542 * This allows things, log files configuration 543 * for example, to settle down. 544 */ 545 546 ap_server_root = def_server_root; 547 if (temp_error_log) { 548 ap_replace_stderr_log(process- pool, temp_error_log); 549 } 550 server_conf = ap_read_config(process, ptemp, confname, ap_conftree); 551 if (ap_run_pre_config(pconf, plog, ptemp) != OK) { 552 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0, 553 NULL, "Pre-configuration failed"); 554 destroy_and_exit_process(process, 1); 555 } 556 557 ap_process_config_tree(server_conf, ap_conftree, process- pconf, ptemp); 558 ap_fixup_virtual_hosts(pconf, server_conf); 559 ap_fini_vhost_config(pconf, server_conf); 560 apr_hook_sort_all(); 561 if (configtestonly) { 562 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, "Syntax OK"); 563 destroy_and_exit_process(process, 0); 564 } 565 566 signal_server = APR_RETRIEVE_OPTIONAL_FN(ap_signal_server); 567 if (signal_server) { 568 int exit_status; 569 570 if (signal_server( exit_status, pconf) != 0) { 571 destroy_and_exit_process(process, exit_status); 572 } 573 } 574 575 apr_pool_clear(plog); 576 577 if ( ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) { 578 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 579 0, NULL, "Unable to open logs"); 580 destroy_and_exit_process(process, 1); 581 } 582 583 if ( ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) { 584 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0, 585 NULL, "Configuration Failed"); 586 destroy_and_exit_process(process, 1); 587 } 588 589 apr_pool_destroy(ptemp); 590 591 for (;;) { 592 apr_hook_deregister_all(); 593 apr_pool_clear(pconf); 594 595 for (mod = ap_prelinked_modules; *mod != NULL; mod++) { 596 ap_register_hooks(*mod, pconf); 597 } 598 599 /* This is a hack until we finish the code so that it only reads 600 * the config file once and just operates on the tree already in 601 * memory. rbb 602 */ 603 ap_conftree = NULL; 604 apr_pool_create( ptemp, pconf); 605 apr_pool_tag(ptemp, "ptemp"); 606 ap_server_root = def_server_root; 607 server_conf = ap_read_config(process, ptemp, confname, ap_conftree); 608 if (ap_run_pre_config(pconf, plog, ptemp) != OK) { 609 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 610 0, NULL, "Pre-configuration failed"); 611 destroy_and_exit_process(process, 1); 612 } 613 614 ap_process_config_tree(server_conf, ap_conftree, process- pconf, ptemp); 615 ap_fixup_virtual_hosts(pconf, server_conf); 616 ap_fini_vhost_config(pconf, server_conf); 617 apr_hook_sort_all(); 618 apr_pool_clear(plog); 619 if (ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) { 620 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 621 0, NULL, "Unable to open logs"); 622 destroy_and_exit_process(process, 1); 623 } 624 625 if (ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) { 626 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 627 0, NULL, "Configuration Failed"); 628 destroy_and_exit_process(process, 1); 629 } 630 631 apr_pool_destroy(ptemp); 632 apr_pool_lock(pconf, 1); 633 634 ap_run_optional_fn_retrieve(); 635 636 if (ap_mpm_run(pconf, plog, server_conf)) 637 break; 638 639 apr_pool_lock(pconf, 0); 640 } 641 642 apr_pool_lock(pconf, 0); 643 destroy_and_exit_process(process, 0); 644 645 return 0; /* Termination ok */ 646 } 647 648 /* force Expat to be linked into the server executable */ 649 #if defined(USE_EXPAT) !defined(SHARED_CORE_BOOTSTRAP) 650 #include "xmlparse.h" 651 const XML_LChar *suck_in_expat(void); 652 const XML_LChar *suck_in_expat(void) 653 { 654 return XML_ErrorString(XML_ERROR_NONE); 655 } 656 #endif /* USE_EXPAT */ 657 658 #ifndef SHARED_CORE_BOOTSTRAP 659 /* 660 * Force apr_password_validate() into the image so that modules like 661 * mod_auth can use it even if they re dynamically loaded. 662 */ 663 void suck_in_apr_password_validate(void); 664 void suck_in_apr_password_validate(void) 665 { 666 apr_password_validate("a", "b"); 667 } 668 #endif 669 670 #ifdef AP_USING_AUTOCONF 671 /* This ugly little hack pulls any function referenced in exports.c into 672 * the web server. exports.c is generated during the build, and it 673 * has all of the APR functions specified by the apr/apr.exports and 674 * apr-util/aprutil.exports files. 675 */ 676 const void *suck_in_APR(void); 677 const void *suck_in_APR(void) 678 { 679 extern const void *ap_ugly_hack; 680 681 return ap_ugly_hack; 682 } 683 #endif source 1 /* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http //www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "apr.h" 18 #include "apr_strings.h" 19 #include "apr_getopt.h" 20 #include "apr_general.h" 21 #include "apr_lib.h" 22 #include "apr_md5.h" 23 #include "apr_time.h" 24 #include "apr_version.h" 25 #include "apu_version.h" 26 27 #define APR_WANT_STDIO 28 #define APR_WANT_STRFUNC 29 #include "apr_want.h" 30 31 #define CORE_PRIVATE 32 #include "ap_config.h" 33 #include "httpd.h" 34 #include "http_main.h" 35 #include "http_log.h" 36 #include "http_config.h" 37 #include "http_vhost.h" 38 #include "apr_uri.h" 39 #include "util_ebcdic.h" 40 #include "ap_mpm.h" 41 #include "mpm_common.h" 42 43 /* WARNING Win32 binds http_main.c dynamically to the server. Please place 44 * extern functions and global data in another appropriate module. 45 * 46 * Most significant main() global data can be found in http_config.c 47 */ 48 49 /* XXX - We should be able to grab the per-MPM settings here too */ 50 static void show_compile_settings(void) 51 { 52 printf("Server version %s\n", ap_get_server_version()); 53 printf("Server built %s\n", ap_get_server_built()); 54 printf("Server s Module Magic Number %u %u\n", 55 MODULE_MAGIC_NUMBER_MAJOR, MODULE_MAGIC_NUMBER_MINOR); 56 printf("Server loaded APR %s, APR-UTIL %s\n", 57 apr_version_string(), apu_version_string()); 58 printf("Compiled using APR %s, APR-UTIL %s\n", 59 APR_VERSION_STRING, APU_VERSION_STRING); 60 /* sizeof(foo) is long on some platforms so we might as well 61 * make it long everywhere to keep the printf format 62 * consistent 63 */ 64 printf("Architecture %ld-bit\n", 8 * (long)sizeof(void *)); 65 printf("Server compiled with....\n"); 66 #ifdef BIG_SECURITY_HOLE 67 printf(" -D BIG_SECURITY_HOLE\n"); 68 #endif 69 70 #ifdef SECURITY_HOLE_PASS_AUTHORIZATION 71 printf(" -D SECURITY_HOLE_PASS_AUTHORIZATION\n"); 72 #endif 73 74 #ifdef APACHE_MPM_DIR 75 printf(" -D APACHE_MPM_DIR=\"%s\"\n", APACHE_MPM_DIR); 76 #endif 77 78 #ifdef HAVE_SHMGET 78 #ifdef HAVE_SHMGET 79 printf(" -D HAVE_SHMGET\n"); 80 #endif 81 82 #if APR_FILE_BASED_SHM 83 printf(" -D APR_FILE_BASED_SHM\n"); 84 #endif 85 86 #if APR_HAS_SENDFILE 87 printf(" -D APR_HAS_SENDFILE\n"); 88 #endif 89 90 #if APR_HAS_MMAP 91 printf(" -D APR_HAS_MMAP\n"); 92 #endif 93 94 #ifdef NO_WRITEV 95 printf(" -D NO_WRITEV\n"); 96 #endif 97 98 #ifdef NO_LINGCLOSE 99 printf(" -D NO_LINGCLOSE\n"); 100 #endif 101 102 #if APR_HAVE_IPV6 103 printf(" -D APR_HAVE_IPV6 (IPv4-mapped addresses "); 104 #ifdef AP_ENABLE_V4_MAPPED 105 printf("enabled)\n"); 106 #else 107 printf("disabled)\n"); 108 #endif 109 #endif 110 111 #if APR_USE_FLOCK_SERIALIZE 112 printf(" -D APR_USE_FLOCK_SERIALIZE\n"); 113 #endif 114 115 #if APR_USE_SYSVSEM_SERIALIZE 116 printf(" -D APR_USE_SYSVSEM_SERIALIZE\n"); 117 #endif 118 119 #if APR_USE_POSIXSEM_SERIALIZE 120 printf(" -D APR_USE_POSIXSEM_SERIALIZE\n"); 121 #endif 122 123 #if APR_USE_FCNTL_SERIALIZE 124 printf(" -D APR_USE_FCNTL_SERIALIZE\n"); 125 #endif 126 127 #if APR_USE_PROC_PTHREAD_SERIALIZE 128 printf(" -D APR_USE_PROC_PTHREAD_SERIALIZE\n"); 129 #endif 130 131 #if APR_USE_PTHREAD_SERIALIZE 132 printf(" -D APR_USE_PTHREAD_SERIALIZE\n"); 133 #endif 134 135 #if APR_PROCESS_LOCK_IS_GLOBAL 136 printf(" -D APR_PROCESS_LOCK_IS_GLOBAL\n"); 137 #endif 138 139 #ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT 140 printf(" -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT\n"); 141 #endif 142 143 #if APR_HAS_OTHER_CHILD 144 printf(" -D APR_HAS_OTHER_CHILD\n"); 145 #endif 146 147 #ifdef AP_HAVE_RELIABLE_PIPED_LOGS 148 printf(" -D AP_HAVE_RELIABLE_PIPED_LOGS\n"); 149 #endif 150 151 #ifdef BUFFERED_LOGS 152 printf(" -D BUFFERED_LOGS\n"); 153 #ifdef PIPE_BUF 154 printf(" -D PIPE_BUF=%ld\n",(long)PIPE_BUF); 155 #endif 156 #endif 157 158 #if APR_CHARSET_EBCDIC 159 printf(" -D APR_CHARSET_EBCDIC\n"); 160 #endif 161 162 #ifdef APACHE_XLATE 163 printf(" -D APACHE_XLATE\n"); 164 #endif 165 166 #ifdef NEED_HASHBANG_EMUL 167 printf(" -D NEED_HASHBANG_EMUL\n"); 168 #endif 169 170 #ifdef SHARED_CORE 171 printf(" -D SHARED_CORE\n"); 172 #endif 173 174 /* This list displays the compiled in default paths */ 175 #ifdef HTTPD_ROOT 176 printf(" -D HTTPD_ROOT=\"" HTTPD_ROOT "\"\n"); 177 #endif 178 179 #ifdef SUEXEC_BIN 180 printf(" -D SUEXEC_BIN=\"" SUEXEC_BIN "\"\n"); 181 #endif 182 183 #if defined(SHARED_CORE) defined(SHARED_CORE_DIR) 184 printf(" -D SHARED_CORE_DIR=\"" SHARED_CORE_DIR "\"\n"); 185 #endif 186 187 #ifdef DEFAULT_PIDLOG 188 printf(" -D DEFAULT_PIDLOG=\"" DEFAULT_PIDLOG "\"\n"); 189 #endif 190 191 #ifdef DEFAULT_SCOREBOARD 192 printf(" -D DEFAULT_SCOREBOARD=\"" DEFAULT_SCOREBOARD "\"\n"); 193 #endif 194 195 #ifdef DEFAULT_LOCKFILE 196 printf(" -D DEFAULT_LOCKFILE=\"" DEFAULT_LOCKFILE "\"\n"); 197 #endif 198 199 #ifdef DEFAULT_ERRORLOG 200 printf(" -D DEFAULT_ERRORLOG=\"" DEFAULT_ERRORLOG "\"\n"); 201 #endif 202 203 #ifdef AP_TYPES_CONFIG_FILE 204 printf(" -D AP_TYPES_CONFIG_FILE=\"" AP_TYPES_CONFIG_FILE "\"\n"); 205 #endif 206 207 #ifdef SERVER_CONFIG_FILE 208 printf(" -D SERVER_CONFIG_FILE=\"" SERVER_CONFIG_FILE "\"\n"); 209 #endif 210 } 211 212 static void destroy_and_exit_process(process_rec *process, 213 int process_exit_value) 214 { 215 apr_pool_destroy(process- pool); /* and destroy all descendent pools */ 216 apr_terminate(); 217 exit(process_exit_value); 218 } 219 220 static process_rec *init_process(int *argc, const char * const * *argv) 221 { 222 process_rec *process; 223 apr_pool_t *cntx; 224 apr_status_t stat; 225 const char *failed = "apr_app_initialize()"; 226 227 stat = apr_app_initialize(argc, argv, NULL); 228 if (stat == APR_SUCCESS) { 229 failed = "apr_pool_create()"; 230 stat = apr_pool_create( cntx, NULL); 231 } 232 233 if (stat != APR_SUCCESS) { 234 /* For all intents and purposes, this is impossibly unlikely, 235 * but APR doesn t exist yet, we can t use it for reporting 236 * these earliest two failures; 237 */ 238 char ctimebuff[APR_CTIME_LEN]; 239 apr_ctime(ctimebuff, apr_time_now()); 240 fprintf(stderr, "[%s] [crit] (%d) %s %s failed " 241 "to initial context, exiting\n", 242 ctimebuff, stat, (*argv)[0], failed); 243 apr_terminate(); 244 exit(1); 245 } 246 247 apr_pool_tag(cntx, "process"); 248 ap_open_stderr_log(cntx); 249 250 /* Now we have initialized apr and our logger, no more 251 * exceptional error reporting required for the lifetime 252 * of this server process. 253 */ 254 255 process = apr_palloc(cntx, sizeof(process_rec)); 256 process- pool = cntx; 257 258 apr_pool_create( process- pconf, process- pool); 259 apr_pool_tag(process- pconf, "pconf"); 260 process- argc = *argc; 261 process- argv = *argv; 262 process- short_name = apr_filepath_name_get((*argv)[0]); 263 return process; 264 } 265 266 static void usage(process_rec *process) 267 { 268 const char *bin = process- argv[0]; 269 char pad[MAX_STRING_LEN]; 270 unsigned i; 271 272 for (i = 0; i strlen(bin); i++) { 273 pad[i] = ; 274 } 275 276 pad[i] = \0 ; 277 278 #ifdef SHARED_CORE 279 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL , 280 "Usage %s [-R directory] [-D name] [-d directory] [-f file]", 281 bin); 282 #else 283 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 284 "Usage %s [-D name] [-d directory] [-f file]", bin); 285 #endif 286 287 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 288 " %s [-C \"directive\"] [-c \"directive\"]", pad); 289 290 #ifdef WIN32 291 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 292 " %s [-w] [-k start|restart|stop|shutdown]", pad); 293 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 294 " %s [-k install|config|uninstall] [-n service_name]", 295 pad); 296 #endif 297 #ifdef AP_MPM_WANT_SIGNAL_SERVER 298 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 299 " %s [-k start|restart|graceful|stop]", 300 pad); 301 #endif 302 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 303 " %s [-v] [-V] [-h] [-l] [-L] [-t] [-S]", pad); 304 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 305 "Options "); 306 307 #ifdef SHARED_CORE 308 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 309 " -R directory specify an alternate location for " 310 "shared object files"); 311 #endif 312 313 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 314 " -D name define a name for use in " 315 " IfDefine name directives"); 316 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 317 " -d directory specify an alternate initial " 318 "ServerRoot"); 319 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 320 " -f file specify an alternate ServerConfigFile"); 321 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 322 " -C \"directive\" process directive before reading " 323 "config files"); 324 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 325 " -c \"directive\" process directive after reading " 326 "config files"); 327 328 #ifdef NETWARE 329 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 330 " -n name set screen name"); 331 #endif 332 #ifdef WIN32 333 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 334 " -n name set service name and use its " 335 "ServerConfigFile"); 336 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 337 " -k start tell Apache to start"); 338 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 339 " -k restart tell running Apache to do a graceful " 340 "restart"); 341 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 342 " -k stop|shutdown tell running Apache to shutdown"); 343 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 344 " -k install install an Apache service"); 345 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 346 " -k config change startup Options of an Apache " 347 "service"); 348 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 349 " -k uninstall uninstall an Apache service"); 350 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 351 " -w hold open the console window on error"); 352 #endif 353 354 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 355 " -e level show startup errors of level " 356 "(see LogLevel)"); 357 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 358 " -E file log startup errors to file"); 359 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 360 " -v show version number"); 361 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 362 " -V show compile settings"); 363 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 364 " -h list available command line options " 365 "(this page)"); 366 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 367 " -l list compiled in modules"); 368 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 369 " -L list available configuration " 370 "directives"); 371 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 372 " -t -D DUMP_VHOSTS show parsed settings (currently only " 373 "vhost settings)"); 374 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 375 " -S a synonym for -t -D DUMP_VHOSTS"); 376 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, 377 " -t run syntax check for config files"); 378 379 destroy_and_exit_process(process, 1); 380 } 381 382 int main(int argc, const char * const argv[]) 383 { 384 char c; 385 int configtestonly = 0; 386 const char *confname = SERVER_CONFIG_FILE; 387 const char *def_server_root = HTTPD_ROOT; 388 const char *temp_error_log = NULL; 389 process_rec *process; 390 server_rec *server_conf; 391 apr_pool_t *pglobal; 392 apr_pool_t *pconf; 393 apr_pool_t *plog; /* Pool of log streams, reset _after_ each read of conf */ 394 apr_pool_t *ptemp; /* Pool for temporary config stuff, reset often */ 395 apr_pool_t *pcommands; /* Pool for -D, -C and -c switches */ 396 apr_getopt_t *opt; 397 apr_status_t rv; 398 module **mod; 399 const char *optarg; 400 APR_OPTIONAL_FN_TYPE(ap_signal_server) *signal_server; 401 402 AP_MONCONTROL(0); /* turn off profiling of startup */ 403 404 process = init_process( argc, argv); 405 pglobal = process- pool; 406 pconf = process- pconf; 407 ap_server_argv0 = process- short_name; 408 409 #if APR_CHARSET_EBCDIC 410 if (ap_init_ebcdic(pglobal) != APR_SUCCESS) { 411 destroy_and_exit_process(process, 1); 412 } 413 #endif 414 415 apr_pool_create( pcommands, pglobal); 416 apr_pool_tag(pcommands, "pcommands"); 417 ap_server_pre_read_config = apr_array_make(pcommands, 1, sizeof(char *)); 418 ap_server_post_read_config = apr_array_make(pcommands, 1, sizeof(char *)); 419 ap_server_config_defines = apr_array_make(pcommands, 1, sizeof(char *)); 420 421 ap_setup_prelinked_modules(process); 422 423 ap_run_rewrite_args(process); 424 425 /* Maintain AP_SERVER_BASEARGS list in http_main.h to allow the MPM 426 * to safely pass on our args from its rewrite_args() handler. 427 */ 428 apr_getopt_init( opt, pcommands, process- argc, process- argv); 429 430 while ((rv = apr_getopt(opt, AP_SERVER_BASEARGS, c, optarg)) 431 == APR_SUCCESS) { 432 char **new; 433 434 switch (c) { 435 case c 436 new = (char **)apr_array_push(ap_server_post_read_config); 437 *new = apr_pstrdup(pcommands, optarg); 438 break; 439 440 case C 441 new = (char **)apr_array_push(ap_server_pre_read_config); 442 *new = apr_pstrdup(pcommands, optarg); 443 break; 444 445 case d 446 def_server_root = optarg; 447 break; 448 449 case D 450 new = (char **)apr_array_push(ap_server_config_defines); 451 *new = apr_pstrdup(pcommands, optarg); 452 break; 453 454 case e 455 if (strcasecmp(optarg, "emerg") == 0) { 456 ap_default_loglevel = APLOG_EMERG; 457 } 458 else if (strcasecmp(optarg, "alert") == 0) { 459 ap_default_loglevel = APLOG_ALERT; 460 } 461 else if (strcasecmp(optarg, "crit") == 0) { 462 ap_default_loglevel = APLOG_CRIT; 463 } 464 else if (strncasecmp(optarg, "err", 3) == 0) { 465 ap_default_loglevel = APLOG_ERR; 466 } 467 else if (strncasecmp(optarg, "warn", 4) == 0) { 468 ap_default_loglevel = APLOG_WARNING; 469 } 470 else if (strcasecmp(optarg, "notice") == 0) { 471 ap_default_loglevel = APLOG_NOTICE; 472 } 473 else if (strcasecmp(optarg, "info") == 0) { 474 ap_default_loglevel = APLOG_INFO; 475 } 476 else if (strcasecmp(optarg, "debug") == 0) { 477 ap_default_loglevel = APLOG_DEBUG; 478 } 479 else { 480 usage(process); 481 } 482 break; 483 484 case E 485 temp_error_log = apr_pstrdup(process- pool, optarg); 486 break; 487 488 case X 489 new = (char **)apr_array_push(ap_server_config_defines); 490 *new = "DEBUG"; 491 break; 492 493 case f 494 confname = optarg; 495 break; 496 497 case v 498 printf("Server version %s\n", ap_get_server_version()); 499 printf("Server built %s\n", ap_get_server_built()); 500 destroy_and_exit_process(process, 0); 501 502 case V 503 show_compile_settings(); 504 destroy_and_exit_process(process, 0); 505 506 case l 507 ap_show_modules(); 508 destroy_and_exit_process(process, 0); 509 510 case L 511 ap_show_directives(); 512 destroy_and_exit_process(process, 0); 513 514 case t 515 configtestonly = 1; 516 break; 517 518 case S 519 configtestonly = 1; 520 new = (char **)apr_array_push(ap_server_config_defines); 521 *new = "DUMP_VHOSTS"; 522 break; 523 524 case h 525 case ? 526 usage(process); 527 } 528 } 529 530 /* bad cmdline option? then we die */ 531 if (rv != APR_EOF || opt- ind opt- argc) { 532 usage(process); 533 } 534 535 apr_pool_create( plog, pglobal); 536 apr_pool_tag(plog, "plog"); 537 apr_pool_create( ptemp, pconf); 538 apr_pool_tag(ptemp, "ptemp"); 539 540 /* Note that we preflight the config file once 541 * before reading it _again_ in the main loop. 542 * This allows things, log files configuration 543 * for example, to settle down. 544 */ 545 546 ap_server_root = def_server_root; 547 if (temp_error_log) { 548 ap_replace_stderr_log(process- pool, temp_error_log); 549 } 550 server_conf = ap_read_config(process, ptemp, confname, ap_conftree); 551 if (ap_run_pre_config(pconf, plog, ptemp) != OK) { 552 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0, 553 NULL, "Pre-configuration failed"); 554 destroy_and_exit_process(process, 1); 555 } 556 557 ap_process_config_tree(server_conf, ap_conftree, process- pconf, ptemp); 558 ap_fixup_virtual_hosts(pconf, server_conf); 559 ap_fini_vhost_config(pconf, server_conf); 560 apr_hook_sort_all(); 561 if (configtestonly) { 562 ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, "Syntax OK"); 563 destroy_and_exit_process(process, 0); 564 } 565 566 signal_server = APR_RETRIEVE_OPTIONAL_FN(ap_signal_server); 567 if (signal_server) { 568 int exit_status; 569 570 if (signal_server( exit_status, pconf) != 0) { 571 destroy_and_exit_process(process, exit_status); 572 } 573 } 574 575 apr_pool_clear(plog); 576 577 if ( ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) { 578 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 579 0, NULL, "Unable to open logs"); 580 destroy_and_exit_process(process, 1); 581 } 582 583 if ( ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) { 584 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0, 585 NULL, "Configuration Failed"); 586 destroy_and_exit_process(process, 1); 587 } 588 589 apr_pool_destroy(ptemp); 590 591 for (;;) { 592 apr_hook_deregister_all(); 593 apr_pool_clear(pconf); 594 595 for (mod = ap_prelinked_modules; *mod != NULL; mod++) { 596 ap_register_hooks(*mod, pconf); 597 } 598 599 /* This is a hack until we finish the code so that it only reads 600 * the config file once and just operates on the tree already in 601 * memory. rbb 602 */ 603 ap_conftree = NULL; 604 apr_pool_create( ptemp, pconf); 605 apr_pool_tag(ptemp, "ptemp"); 606 ap_server_root = def_server_root; 607 server_conf = ap_read_config(process, ptemp, confname, ap_conftree); 608 if (ap_run_pre_config(pconf, plog, ptemp) != OK) { 609 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 610 0, NULL, "Pre-configuration failed"); 611 destroy_and_exit_process(process, 1); 612 } 613 614 ap_process_config_tree(server_conf, ap_conftree, process- pconf, ptemp); 615 ap_fixup_virtual_hosts(pconf, server_conf); 616 ap_fini_vhost_config(pconf, server_conf); 617 apr_hook_sort_all(); 618 apr_pool_clear(plog); 619 if (ap_run_open_logs(pconf, plog, ptemp, server_conf) != OK) { 620 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 621 0, NULL, "Unable to open logs"); 622 destroy_and_exit_process(process, 1); 623 } 624 625 if (ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) { 626 ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 627 0, NULL, "Configuration Failed"); 628 destroy_and_exit_process(process, 1); 629 } 630 631 apr_pool_destroy(ptemp); 632 apr_pool_lock(pconf, 1); 633 634 ap_run_optional_fn_retrieve(); 635 636 if (ap_mpm_run(pconf, plog, server_conf)) 637 break; 638 639 apr_pool_lock(pconf, 0); 640 } 641 642 apr_pool_lock(pconf, 0); 643 destroy_and_exit_process(process, 0); 644 645 return 0; /* Termination ok */ 646 } 647 648 /* force Expat to be linked into the server executable */ 649 #if defined(USE_EXPAT) !defined(SHARED_CORE_BOOTSTRAP) 650 #include "xmlparse.h" 651 const XML_LChar *suck_in_expat(void); 652 const XML_LChar *suck_in_expat(void) 653 { 654 return XML_ErrorString(XML_ERROR_NONE); 655 } 656 #endif /* USE_EXPAT */ 657 658 #ifndef SHARED_CORE_BOOTSTRAP 659 /* 660 * Force apr_password_validate() into the image so that modules like 661 * mod_auth can use it even if they re dynamically loaded. 662 */ 663 void suck_in_apr_password_validate(void); 664 void suck_in_apr_password_validate(void) 665 { 666 apr_password_validate("a", "b"); 667 } 668 #endif 669 670 #ifdef AP_USING_AUTOCONF 671 /* This ugly little hack pulls any function referenced in exports.c into 672 * the web server. exports.c is generated during the build, and it 673 * has all of the APR functions specified by the apr/apr.exports and 674 * apr-util/aprutil.exports files. 675 */ 676 const void *suck_in_APR(void); 677 const void *suck_in_APR(void) 678 { 679 extern const void *ap_ugly_hack; 680 681 return ap_ugly_hack; 682 } 683 #endif
https://w.atwiki.jp/dmtf/pages/14.html
1Scope The Common Information Model (CIM) (DSP0004) is an object-oriented information model defined by the Distributed Management Task Force (DMTF) that provides a conceptual framework for describing management data. The Common Information Model (CIM) (DSP0004) はDistributed Management Task Force (DMTF) によって定義されたデータ管理のためのオブジェクト指向データモデルです。 The Hypertext Transfer Protocol (HTTP) (RFC 1945, RFC 2068, RFC 2616) is an application-level protocol for distributed, collaborative, hypermedia information systems. This generic stateless protocol can be used for many tasks through extension of its request methods, error codes, and headers. The Hypertext Transfer Protocol (HTTP) (RFC 1945, RFC 2068, RFC 2616) は、ハイパーメディア情報システムを記述したり、コラボレートするためのアプリケーションレベルのプロトコル(規約)です。 この総括的なステートレスプロトコルはリクエストメソッド、エラーコードとヘッダをつかって多くのタスクに使用することが可能です。 The Extensible Markup Language (XML) is a simplified subset of SGML that offers powerful and extensible data modeling capabilities. An XML document is a collection of data represented in XML. An XML schema is a grammar that describes the structure of an XML document. The Extensible Markup Language (XML) Iはパワフルで拡張的なデータモデリングが可能なSGMLの簡素なサブセットです。XMLドキュメントはXMLで表現されたデータの集まりです。XMLスキーマはXMLドキュメントの構造を記述する文法です。 This document defines a mapping of CIM messages onto HTTP that allows implementations of CIM to interoperate in an open, standardized manner. It is based on the CIM XML DTD (DSP0201 and DSP0203) that defines the XML schema for CIM objects and messages. このドキュメントはHTTP上でやり取りされるのCIM実装で許容されたCIMメッセージと オープンで標準化されたマナーとしての相互運用(の規則)へのマッピングを定義します。